
package com.example.d6_homework.homework03;

import java.io.FileInputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;

public class Test {
    public static void main(String[] args) throws Exception {
        // 1.读取这个配置文件
        // 加载配置文件,为后续动态获取类名,方法名等信息做准备
        Properties properties = new Properties();
        properties.load(new FileInputStream("day24-junit-reflect-annotation-proxy\\src\\config.properties"));
    
        // 获取配置文件中的类名
        // 从配置文件中提取将要反射调用的类的名称
        String className = properties.getProperty("class");
    
        // 获取类的字节码文件
        // 通过类名获取对应的Class对象,这是反射操作的第一步
        Class c = Class.forName(className);
        // 获取类的默认构造方法并实例化对象
        // 找到类的无参构造方法,准备创建该类的一个实例
        Constructor constructor = c.getDeclaredConstructor();
        // 实例化对象
        // 使用无参构造方法创建类的实例对象
        Object obj = constructor.newInstance();
    
        // 获取类中的run方法
        // 找到类中名为run的方法,准备调用它
        Method run = c.getDeclaredMethod("run");
        // 调用run方法
        // 在实例对象上调用run方法,执行方法体中的逻辑
        run.invoke(obj);
    }
}
